package cc.vicp.djx314.starfood.dao.dish;

import java.sql.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import org.springframework.core.io.Resource;

import cc.vicp.djx314.starfood.domain.dish.Dish;
import cc.vicp.djx314.starfood.domain.dish.DishesRankKind;
import cc.vicp.djx314.starfood.domain.dish.ProvideTime;
import cc.vicp.djx314.starfood.domain.order.OrderDish;

/**
 * 菜式相关数据库操作接口
 * @author 水山清风
 *
 */
public interface DishMapper {
	/**
	 * 根据排名类别搜出这一类的菜式的前几名，并把它加入缓存
	 * @param rankKind 菜式排名的种类
	 * @param rowBounds 菜式返回将结果的数量控制
	 * @return 符合条件的菜式列表
	 */
	public List<Dish> getCacheIndexDishes(final String rankKind, final RowBounds rowBounds);

	/**
	 * 判断一个排名类型是否存在
	 * @param rankKind 要判断是否存在的类型
	 * @return 排名类型存在则返回排名种类对应的名称，不存在则返回null
	 */
	public Integer getCacheRankKindForIfExists(final Integer rankKindId);

	/**
	 * 获取所有排名类型
	 * @param rowBounds 控制数量
	 * @return 所有排名类型
	 */
	public List<DishesRankKind> getCacheRankKinds(final RowBounds rowBounds);

	/**
	 * 获取某一类排名前几名的菜式
	 * @param rankKindId 排名种类id
	 * @param rowBounds 返回数量控制
	 * @return 某一类排前几名的菜式
	 */
	public List<Dish> getCacheDishesRankOfOneKind(final Integer rankKindId,
			final RowBounds rowBounds);

	/**
	 * 获得单个菜式的详细信息
	 * @param id
	 * @return
	 */
	public Dish findDishByOne(final Integer id);

	/**
	 * 获取菜式对应的图片
	 * @param id
	 * @return
	 */
	public Resource getDishImg(Integer id);

	public Dish findDishForCart(Integer id);

	public List<Dish> getCacheDishAll();

	public int updateDishDayBuy(@Param("dishId") Integer dishId,
			@Param("date") Date date, @Param("increment") Integer increment);  //Date类型是java.sql.Date

	public int createDishDayBuy(@Param("dishId") Integer dishId,
			@Param("date") Date date, @Param("increment") Integer increment);  //Date类型是java.sql.Date

	public List<OrderDish> findOrderDishByOrder(Integer orderId);

	public void createCacheDish(@Param("dish") Dish dish, @Param("dishImg") byte[] dishImg);

	public void createCacheProvideTime(ProvideTime provideTime);

	public void createCacheTimeDish(@Param("dishId") Integer dishId,
			@Param("timeId") Integer timeId);
}